<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>object.defineProperty</title>
</head>

<body>
  <script>
    // Object.defineProperty() 定义新属性或修改原有的属性
    var obj = {
      id: 1,
      pname: '小米',
      price: 1999
    };
    // 1. 以前的对象添加和修改属性的方式
    // obj.num = 1000;
    // obj.price = 99;
    // console.log(obj);
    // 2. Object.defineProperty() 定义新属性或修改原有的属性

    // a1
    Object.defineProperty(obj, 'num', {
      value: 1000,
    });

    // a2
    Object.defineProperty(obj, 'price', {
      value: 9.9
    });

    Object.defineProperty(obj, 'id', {
      // 如果值为false 不允许修改这个属性值 默认值也是false
      writable: false,
    });
    // console.log(Object.keys(obj));

    // a3
    Object.defineProperty(obj, 'address', {
      value: '中国山东蓝翔技校xx单元',
      // 如果只为false 不允许修改这个属性值 默认值也是false
      writable: false,
      // enumerable 如果值为false 则不允许遍历, 默认的值是 false
      enumerable: false,
      // configurable 如果为false 则不允许删除这个属性 不允许在修改第三个参数里面的特性 默认为false
      configurable: false
    });

    Object.defineProperty(obj, 'address', {
      enumerable: true,
    });
  </script>
</body>

</html>